/*
 * flash.c
 *
 *  Created on: 2024骞�3鏈�12鏃�
 *      Author: 86152
 */
#include "zf_common_headfile.h"
//===================================================flash内容===================================================

const flash_mapping_table M_T_F[M_T_F_SIZE] = {
    {0, &thres, "thres"},
    {1, &kp_gyro, "kp_g"},
    {2, &kp_direction, "kp_p"},
    {3 ,&kd_gyro, "kd_g"},
    {4, &kd_direction, "kd_p"},
}; // 木桶饭（不是

/* 上面是FLASH与变量的映射表。不言自明，一目了然。注意变量名不能超出8字符。 */


/*图像处理部分*/
float thres = 120;                 // 二值化阈值，主要用于找起始点(边线使用自适应阈值，不使用该阈值)
float block_size = 7;            // 自适应阈值的block大小
float clip_value = 2;            // 自适应阈值的阈值裁减量
float begin_x = 8;               // 起始点距离图像中心的左右偏移量
float begin_y = 58;               // 起始点距离图像底部的上下偏移量 120高度：35;100高度：53
float line_blur_kernel = 7;      // 边线三角滤波核的大小
float pixel_per_meter = 102;       // 俯视图中，每个像素对应的长度 (厘米*10^3)/像素个数 调大意味着平移距离增大 原：102
float sample_dist = 0.022;           // 边线等距采样的间距 动态调整，使其每两点距离刚好为1cm 为0.02时10个点间隔约为9cm
float angle_dist = 0.2;            // 计算边线转角时，三个计算点的距离
float far_rate = 0.5;              //
float aim_distance_flash = 0.68;          // 预锚点长度
float aim_dist[5] = {0.68,0.78,0.88,0.98,1.08};//多个预瞄点长度，间隔5cm，34~54个点，用于速度模糊控制，而不是偏差角计算！
int choose_Binarization = 0;        //图像预处理方案选择 0:sobel 1:ostu 2:canny
/*图像处理部分*/



//===================================================flash内容===================================================

//-------------------------------------------------------------------------------------------------------------------
// 函数简介     擦除flash页面
// 参数说明     无
// 返回参数     无
// 使用示例     flash_erasure();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void flash_erasure()
{
    if(flash_check(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX))                      // 判断是否有数据
    {
        flash_erase_sector(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX);              // 擦除这一页
    }
}
//-------------------------------------------------------------------------------------------------------------------
// 函数简介     将指定变量的值写入对应的flash页面
// 参数说明     无
// 返回参数     无
// 使用示例     flash_write();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void flash_write()
{
    flash_erasure();                                                            // 清空flash
    system_delay_ms(40);                                                        //等待擦写完成
    flash_buffer_clear();                                                       // 清空缓冲区
    system_delay_ms(40);                                                        //等待擦写完成
    //------------------------------flash内容------------------------------------
    //flash_union_buffer[0].float_type  = thres;                              // 向缓冲区第 0 个位置写入 float数据

    for(int i = 0; i < M_T_F_SIZE; i++) {
        flash_union_buffer[i].float_type = *M_T_F->variable_address;
    }

    //--------------------------------------------------------------------------
    if(flash_write_page_from_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX))
    {
        printf("write error");
    }
}
//-------------------------------------------------------------------------------------------------------------------
// 函数简介     读出flash页面中储存的值到对应的变量
// 参数说明     无
// 返回参数     无
// 使用示例     flash_write();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void flash_read()
{
    flash_buffer_clear();
    system_delay_ms(40);                                                        //等待擦写完成
    flash_read_page_to_buffer(FLASH_SECTION_INDEX, FLASH_PAGE_INDEX);           // 将数据从 flash 读取到缓冲区
    //------------------------------flash内容------------------------------------
    //thres = flash_union_buffer[0].float_type;                              // 从缓冲区读取数据出来

    for(int i = 0; i < M_T_F_SIZE; i++) {
        *M_T_F->variable_address = flash_union_buffer[i].float_type;
    }

    //--------------------------------------------------------------------------
}
